class LinkedList:

    class Element:

        def __init__(self, list, data, next):
            self._list = list
            self._data = data
            self._next = next

        def get_data(self):
            return self._daat

        data = property(fget=lambda self: self.get_data())

        def get_next(self):
            return self._next

        next = property(fget=lambda self: self.get_next())

    def __init__(self):
        self._head = None
        self._tail = None

    def purge(self):
        self._head = None
        self._tail = None

    def get_head(self):
        return self._head

    head = property(fget=lambda self: self.get_head())

    def get_tail(self):
        return self._tail

    tail = property(fget=lambda self: self.get_tail())

    def get_is_empty(self):
        return self._head is None

    is_empty = property(fget=lambda self: self.get_is_empty())

    def get_first(self):
        if self._head is None:
            return None
        return self._head._data
